{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-3-04466810cd95>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From /var/sw/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From /var/sw/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From /var/sw/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /var/sw/anaconda3/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "# 训练集\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "# 验证集\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "# 测试集\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练集数据量５5０００，图像２８＊２８像素=784\n",
    "验证集数量５０００：可以用于调整模型的超参数和用于对模型的能力进行初步评估,类似交叉验证留出来的那一部分验证数据.\n",
    "测试集数量１００００"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n80OdcguZXHZvruy0k06N7im3rTjVKdd4+8cILROLv1IAADwhCQMA4AlJGAAAT5gTDrP+7t1FPt57\n7hlOucrEX00c+b4cKI31/e12eRPuecSpq+UsTYm8DOnW1UeY+OMv7ZxV9uPulqTZq+1dUx454VKn\n7uOXR5n4onvtsrUP3nTnKpEY+TWqRNVuZq57x5wDhrKcrCwd+J2/rUG3XHq4iede8GRUz/n+O3eL\nW19LTTkTBgDAE5IwAACeMBwd5umDXgmU7LXuq7bWdNo1zFtRRj2qPLZddIRTDg5B1wrbGWlOrl0i\n9viaXiaeN7Sj067Wu7+YuOVuu2TC3VfLlTrpV6fc7s3rTfzr+UNNPO6kG5x26Z/+VMyrIlZZj66O\nqt2A6e40QmOZnYjuIIJmd811ymvHx/f10xo3MvGC65s6dT9eFry7U+RdvV7bZpegZj+/yanzNZjO\nmTAAAJ6QhAEA8KTSD0enNXeHNbKUvaIyVaWXdXcqtfWd3Kucg0PQ43bUdeqev+A0E4d++c3EWWFX\nOEbaMas4KdXcoe+Of1lq4ozA30QoLbqbQ6Dk0po0NnF25rKI7S5d2tPEza5e5dT5u1a3cjqm9kKn\n/G4bO72Uv2BxVK+R2r6NiRdcUd+pG3re8yY+qdqOsGdGHoIOGnv9mSZOmz0tquckGmfCAAB4QhIG\nAMATkjAAAJ5U+jnh3aPdcna6nQ/MD9zcPfNNd4kSEi8lsBPWHV9d4NRl/zI1ru+VWr+eiauPc+d6\n32j5UaDEPHBZWNO7iYnf3/99py5V2XOHTbvtLlkpe9wlJyrd7rSlc/fEu4uVRpvRdonYkN5dnLp7\n97NLAK+qudypS33ffn/O3NlYotGlxiQTX5oV3dK0cO/vsDvZ3fb5RU5dux/ssrVYrhdJBM6EAQDw\nhCQMAIAnlXI4OjW7lYlvbf5+xHYXL7E7MdV83c8NnyuT+jPcW2FsCu0y8dTeQ526bs8OMnH7//vd\nxPlr10V8/bRGDU28o3Mjp27QsNdMfFr1LU5dcNjqyc32b6faN3MjtkPiBKeJPmoX+PzOd9u1eXug\njW/2szl/MshbvNTEE4Yf49QNGmL/XcN3tetbc6UtBOM42Knd6YUnN9ph8q//2s3E2T9NcdqVx88o\nZ8IAAHhCEgYAwBOSMAAAnlTKOeE9jWqZuEe1nIjt5r/R1sQNNDcIT7Ss1915u+NaDzbxrwOecOrm\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fadcbaeaa20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    # 取4行4列图形,取地idx+1个子图进行绘制\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    # 其中plt.axis就是设置坐标范围的！超出坐标范围的点不会被画出来！\n",
    "    # axis('off')-不显示坐标尺寸\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " tf.truncated_normal(shape, mean, stddev) :\n",
    "        shape表示生成张量的维度，mean是均值，stddev是标准差。\n",
    "        这个函数产生正太分布，均值和标准差自己设定。\n",
    "        这是一个截断的产生正太分布的函数，就是说产生正太分布的值如果与均值的差值大于两倍的标准差，那就重新生成。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /var/sw/anaconda3/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n"
     ]
    }
   ],
   "source": [
    "# mnist数据为28*28的图像,展开成一维数据就是784\n",
    "# None表示:有过少个数据(模型训练时的数据量,不确定时用None, 确定时可使用确定的数)\n",
    "# 为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，\n",
    "# 两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，所以第一个维度留空\n",
    "x = tf.placeholder(\"float\", [None, 784]) # 为什么要用float?\n",
    "\n",
    "# y是标签,使用整数类型\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "\n",
    "# 学习率使用float\n",
    "learning_rate = tf.placeholder(\"float\")\n",
    "\n",
    "\n",
    "def initialize(shape, stddev=0.1):\n",
    "    # 使用高斯分布的随机一段,初始化权重矩阵, 标准差0.1\n",
    "    return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "# 初始化权重,784行*100列的整体分布数据\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "\n",
    "# 偏置项:100个,和输出一致\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "\n",
    "# 无激活输入\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "\n",
    "# 使用ReLu激活函数:ReLu=max(0,x)\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "\n",
    "# 100*10\n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "\n",
    "# 偏置项:10\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 双层网络\n",
    "    L1为网络第一层,输入784维,输出100维\n",
    "    L2为网络第二次,输入100维,输出10维,10维代表这labels的 0~9\n",
    "    \n",
    "### x是否可以使用int64类型: \n",
    "    x = tf.placeholder(\"float\", [None, 784]) \n",
    "    图像数据,感觉这里可以使用int64类型\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "# 优化算法: 梯度下降\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### sparse_softmax_cross_entropy_with_logitsloss\n",
    "    激活函数使用softmax,\n",
    "    损失函数使用corss-entropy,交叉熵\n",
    "    这样做的好处是labels可以不用手动做one_hot省了一些麻烦\n",
    "    \n",
    "### 为什么选择softmax作为激活函数\n",
    "\n",
    "    为什么现在神经网络中普遍采用Softmax作为回归分类函数呢。\n",
    "    之所以选择Softmax，很大程度是因为Softmax中使用了 [指数]，这样可以 [让大的值更大，让小的更小，增加了区分对比度，学习效率更高] 。第二个是因为softmax是 [连续可导的，消除了拐点] ，这个特性在机器学习的梯度下降法等地方非常必要。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 预测值\n",
    "pred = tf.nn.softmax(logits)\n",
    "\n",
    "# 真实值\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "\n",
    "#真确率\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))\n",
    "\n",
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 以上定义的所有操作，均为计算图，也就是仅仅是定义了网络的结构，实际需要运行的话，还需要创建一个session，并将数据填入网络中。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.561937, the validation accuracy is 0.879\n",
      "after 200 training steps, the loss is 0.276647, the validation accuracy is 0.9028\n",
      "after 300 training steps, the loss is 0.266977, the validation accuracy is 0.9248\n",
      "after 400 training steps, the loss is 0.367008, the validation accuracy is 0.9216\n",
      "after 500 training steps, the loss is 0.236057, the validation accuracy is 0.9338\n",
      "after 600 training steps, the loss is 0.284368, the validation accuracy is 0.9392\n",
      "WARNING:tensorflow:From /var/sw/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/saver.py:966: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n",
      "after 700 training steps, the loss is 0.0983412, the validation accuracy is 0.9506\n",
      "after 800 training steps, the loss is 0.0952293, the validation accuracy is 0.9504\n",
      "after 900 training steps, the loss is 0.108419, the validation accuracy is 0.9526\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9503\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    # 初始化数据,并运行计算图\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    # 训练1000次\n",
    "    for i in range(trainig_step):\n",
    "        # 每次使用32个数据进行训练\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面，用我们训练的模型做一个测试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /var/sw/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeEAAAHiCAYAAADf3nSgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xd4FFXbBvD7SSH03jvSmyDYUYoK\nVuzYELu+FhQbVnzt9bNib8irWFBQFBVsgIooTQGlS5HeCZ0AyfP9cSYzc9bdZJPdzWST+3ddXDyz\n5+zZmZyZOTPnTBFVBRERERW9lKBngIiIqLRiI0xERBQQNsJEREQBYSNMREQUEDbCREREAWEjTERE\nFBA2wkRERAFJ+kZYRB4Qkf0islNEKkT5nSUisk9ERuSRR0Vkl4g8Gr+5jT8RyXCWfb+IPBL0/MSK\n9Vmy6hNgnQLRLU+yEJHhzrIsjzJ/K6fus0Xkqgh5eopIjpPvpLjOcJxFszwFUSwaYWeB/P+yReTF\nAhQxUlUrquoup7xxIeXtE5E/czOranMAj0VRbidVvdc3n31F5C+nzCki0s6XliEiz4nIGhHZKiKv\niEh6HsucV1nHi8gyEVkrIuf7Pq8qIr+LSCXfsmSpakUA70exPAnn/B3eFpF/RGSHiPwhIicXsJjQ\n+hzs/K12OH+Xwf7MQdeniBwbZh1WETnHSU/a+swlIgNFZIaIZInI8EIUEVqnvURkoohsC7czT1Cd\niog8IiKrnd+dJCLt8ypcRAY5dbdLROaLSCvn804iMldENonILb786SIyVUQaFXJ5ioSIVBeRz5zl\n+kdELipgEU+palNfeRkiMkxEtovIOhG5NTdNVRc56/TP+ZS5xllHxjtliojcKyIrnHI/EpHKvt9s\nICKfi8gWEVklItfms8w3OnW53VmXj/GlXeRsn8tEpKfv8+bOepRaiOWJSrFohJ0/fEVnweoA2APg\nkxjKOzmkzCmxlAcAItISZsd4LYCqAMYC+EJE0pwsdwE4FEAHAK0AdAEwpJBlPQ+gL4CTALzqWwEe\nB/CEqu6IZVkSLA3ASgA9AFQBcB+Aj0WkaQxlCoBLAFSD+ZsMFJELYpnJeNanqv4csr6dBmAngPFO\nlmSuz1xrADwCYFicytvllDU4v4zRiqJO+wG4AsCxAKoD+BXAe3mUdxWAKwGcCiC3Xjc5yY8DuB1A\nJwBDRKSu8/mtAEar6sp4LVeCvAxgH8z+tj/MepnnAUk+HgDQEkATAL0A3CGxn9FeAmAAgG4A6gMo\nB8B/cjYCwDKYZTgVwGMi0itcQSJyBIAnAJwLs196G8BnIpLqrB9PwGzjNwJ4yffVoQBuVdXsGJcl\nomLRCIc4F8AGxOkow9n5H4s8NrYonQjgZ1WdrKoHADwJoAFMYwOYnexQVd2iqhthKu+KQpZVQVX/\nUtXZMBtKDRE5HEAzVf04xuVIKFXdpaoPqOpyVc1R1S9hNpSuMZT5lKr+rqoHVHUhgM9hNsxYxLM+\nQ10KYFTuWR+SuD5zqeqnqjoGwOY4lTdNVd8DsDQe5Tnyq9NmACar6lJnpzoCQLtwBYlICoD7Adyi\nqvPUWKKqW3xlTVDV1QAWA2gsIo0BnAPguTguU9yJGRI4B8B9qrpTVScD+AKmwSusSwA8rKpbVXU+\ngDcBXBbjrPYF8LaqrlTVnTD1eb6IlBeRigB6AnhUVfc729YoRN5GmwKYq6oz1Tyr+V0ANQHUBlAD\nwGpVXQvgewAHAYCInOt8/luMy5Gn4tgIXwrgXfU91FpEMv1dBwV0CcyGuSzG+RLnX+h0hzzSG4pI\nlUKUtcHp7uoEIAfAVpizqZtiXIYiJyJ1YM4k5/o+K3R9iojAHFTNzS9vfkUhfvXpn7/yMAeS//N9\nXGLqM5IYt9G4zQbyrtOPALQQM6aXDrOvGY/wGjr/OojISqeb8kGncQaAvwD0EZGGMDv4JTAHaneo\n6v54LlQCtAKQraqLfJ/NBtAeAESksVOfjaMpTESqwZypzg5XXgzC1WcGzBm3+D7zp3dAeOMApIrI\nEU5P1BUAZgFYB2AjzIFxQwC9Acx1GvkhAO6OcRnyVawaYafSe8DegUFVqzpHa4VxCYDhMc4aAHwH\noIeYCwjKALgHQBkA5Z30cQAGiUgtp2sqdwdb/t9F5VvWtQBeAPAGzNHpdQB+AFBWRL4RM5bWI0y5\nxYqzo3sfwP9UdUHu5zHW5wMw6+07Mc5ePOvT7xyYLssffZ+ViPrMS4x1Gi/51elamB62hTBDXv0A\n3BKuIJgGGAD6AOgI08V6IUz3NGC6oq+DOYO8BaZnZgeApc445Y8i0i+OyxZPFQFsC/lsG4BKAKCq\nK5z6XFGA8nLL+Fd5MRgH4CoRaeoc/N7pfF7eGcL5BcB9IlJWRLrAbHuRts8dAEYDmAwgC6aX4xqn\nhyMHpi5HwdTr1QAegun67uhsn9+ISKQGPiZp+WcpUpfAdBfFetYKAHCOzOvC/HHzyjcO5uwKAP6j\nqv+6KEZVF4jIpTDjBfVgurLmAVjlZHkUZhxqFkwlvwngEJiu9QKVpaqzYLpaICL1ADwD4CiYHfvN\nMONzP4lIE3+PQXHinDG8B9P9OjBOZQ6EWUeOVdWsPPIVaX2G+FdPTkmoz6DFqU7vB3AYgEYwZ0AX\nA5ggIu1VdXdIcXuc/59S1UwAmSLyOoBTALypqv84cW7vxxSY7vAXAYwE8BWAv0TkB18XdnGxE0Dl\nkM8qwzRUhS0vt4y90ZQnIjt9k2GHBGCuGWgEYBJMW/UMTBd1bn32hxnbXgkzrPF+HmVdBXP22x7A\n3zAHV1+KyCGqukZVf4A5MIaIHAxzPchgAMsBHOPMx1sAjoy0TIVVrM6EYXaw/8s3V/QuBfCpM54Q\nUciFXBGvSlXVUaraQVVrwGzQTQBMd9L2qOpAVW2gqgfBjJ3NjDSgn1dZIZ4DMERV98Ackc9Q1eUA\n0gHUynvxg+F0Gb8Nc8HEOfHonhORK2AuljpeVVfllTeI+nTmsRFMY/tuHrOXdPVZHMSjTmEuohqp\nqquc6wuGw1zsF27HvRDmADKag6L/AnhLVdfDq9NtMI1FiygXsSgtApDmXMiWqxMKOcSjqlthehk6\nRVuery4rRjrjVnNNyf2q2lRVGzrlrXb+QVX/UdXTVLWWqh4BM7Y7LcJPdgIwVs2VzTlqrsBeC+Bo\nfyZn3/USTM9XTQCpzgHXdAAH5/OnKJRi0wiLyNEwF1HEdBWzr7xyMN1Nw+NRnlNmV+dquloAXoep\n1AVOWgMRqS/GkTBXBd9fmLJ8eXoDKKvm4ibAXOB0nHMVYwbidJFMArwKoC2Avk5jExMR6Q9ze0dv\nVY3bhTzxrE/HAABTVHVJhN9L1vqEiKSJSFkAqTBja2XFu+q4MOWlOOWlm0kp63QhxzqfeW1X0wH0\nE5E6zu8PcH7/79BynDPjkTBX+VZyxguvBvClP5+YW6B6wqzzgFendWDGLqPt0i0yai4Y/BTAQyJS\nQUS6ATgDsV28+i7MVeLVRKQNzN9qeCzzKeY2qubONtgOwLMAHnK6jyEibZ26KSMiF8Oc3T4bobjp\nAE4VkYOc8nrDjI3/FZLvKgB/OL1XmwGUc367F+J7EaFHVYvFP5gN5r0IaTthuiDDpT0AYESYzy8E\n8A8AKcj3fOkKoEXIZ5Nhuli2OPNbwZfWHabrYjfMUXT/kO+OA3BPNGU56RkwXaFNfJ8d7/zGWgAX\nhOQfDuCRYlCPTZy/3V6n3nL/9fflKVB9wuzY9oeU91pxqk/nswUArozw+0lZnyF/Xw3590AMddoz\nTHmTElynZWG6L9cC2A7gdwAn+dJf869XMF2qHznlrYQ545WQ35sI4AjfdCeYLvBNMLe2RL08RVyf\n1QGMgblVbAWAi3xpjZ36bBzhu/9aN531e5jzd10fuuxOnkkAropQZk8Aq0I+a+Vse7th9uWhf8+b\nYS6q2uXU+6Eh6e46CXPR1kPOsu4AMB/AgJD8NWEa5cq+z/rDDF0sB9Ar2uUpUF0EvTLEYWUa4lRC\nJkIasjy+s9CpoGF55NkLc3HBw0EvYz7LkuEs+y4A9wc9P6xP1ifrtHDLkyz/YK6P2AlgSZT5Wzp1\nvxvAZRHydIcZh88EcGLQyxjr8hTknziFEhERURErNmPCREREpQ0bYSIiooCwESYiIgpIkT6so3dK\nPw5AB+S7nE8k/1wFw/oMTiLqE2CdBonbaMkSbX3yTJiIiCggbISJiIgCwkaYiIgoIGyEiYiIAsJG\nmIiIKCBshImIiALCRpiIiCggbISJiIgCUqQP6yBKhOWPHOXG2WXtZxPUar/RjX/tNDpiGc0nXO7G\nlaaVs9LqDJ0S6ywSEYXFM2EiIqKAsBEmIiIKCBthIiKigHBMmJLS1q9auvFfnV+K6jv783iU/YJe\nb7nx+4fWs9I+/q6HG2fPXxzlHFJxIl3bW9NfffGeG3d8baAbN3qY4/9FLbVqFTde+NJBbuzfJgFg\nyIaubvxn/1ZWWva8RQmau8TjmTAREVFA2AgTEREFhN3RlBT83c8A8Evnj6L63muZXvfWs7/2duOm\nTTZa+b5t96kb96+01kp79LKabnzQneyOTkYbDqtsTR9AthuXX8NX7gYpp1lDN/6z5+tuHDp89Ejt\nmW7c6ayjrbRG7I4mIiKigmIjTEREFBB2R1OxdeB472rICZ1eDklNd6Pnt3pXSk48/1A725oNbthq\n6ww3Tilb1sr22NSObnxPzT/t+ah2IOp5puJp68HZ1vSqA1luXOPtX4t6dkq1tEYNrelmb/wd0JwU\nDzwTJiIiCggbYSIiooCwESYiIgpIUo8Jb776KGu68QBvbGHBhjpW2r4sbwyxwYdeXH7VTitfzqx5\n8ZxFisHOBmXcOCXkeNE/DjzpdG88N3vpwqjK/vvBQ6zpD6o/45vKsNIajuexajLSbp3d+OfTnrXS\nevx0oxu3wB9FNk+l1Yr/ercUdT3J3sc+Ve/nApdX8Wj7FsOV93nl15zjXcNR7vNpBS67qHHvQkRE\nFBA2wkRERAFJ6u7oOwZ/YE2fU2GrN9E8jy/29MLlB3ZbSS9s7BX7jEVp2oYmblzhmSpWWtoPM0Oz\nlzpV3/VuHTl3xsVWmmzd7sYH1i4vcNlXnfK9NV0xJSNCTkpWW9qVc+N6qeWttAaj0kOzUwLN+c+L\nbrxfs/PIGZ1Jnd63P+jkhZ/t8l7AMmzHmVa2tAnFb7/KM2EiIqKAsBEmIiIKCBthIiKigCT1mPDQ\ney6wpv97sHdMUW2+/QqOrW3FjcscnOnGT3X41Mr3XL2pbvzV7opufGp5+1amvOzRfW48NauCG/cs\nu9/O6PutFuf/x0pq9UPUP1cqxOOl3csf9W5pu7Lq0yGp3mMsb1t7pJVS6fv53nzEPBdUVI6/3rum\nYMyuqlZaxUnerWys08RIn+SNzaZLaszl/bEvx42X769lpZ1VYYsbn1fRe1Ttee+9YeU7rUFXFDc8\nEyYiIgoIG2EiIqKAJHV3dIVRU0OmI+etHOHzF+v2tKYf6dbU+86P3hO4nurZIur5StvjdZtUmOO9\nIL7GT6OtfB3L+J7ctZy3TCRC5gCvC/qXS7wu6Cop9luUfs3yustmPWI/Tavc9uL/1B0CUtu3tqYf\nq/2hG7+93X5zT3bmtiKZp9Jkz5mHW9OX1/vEjf23JUV7i1KHH661pmv94N1GmLHNLuPunt755J/9\nhkYsc9Xd3pO1Gj4+Jar5SDSeCRMREQWEjTAREVFAkro7Oh4OrFtvTVcY7U37OzwqjNpcqPLXX+V1\nh7YvY/+5n97idZ81fWepPV+F+jUKtamLd5V8aBe036WTrnLjVmPY/ZyMVveuETFt5o4mIZ/sSezM\nlBL+IYBHnrWvRD60zD5/zohl+J9wNWTiOW7c9o4FVr7s7dsRSevF3gtdpp3ubeeHZ+y18o277ik3\n7lP2Diut6WPe07Q0Kyvib8Ubz4SJiIgCwkaYiIgoIGyEiYiIAlLqx4QTIa1JIzd+6Z6X3Dj0qTGf\nvHCCG9dY+ysodvu+s8f+fm3zjG/KGyvq9OulVr62ty1xYz5BKTltb7c/Ytqslzpb01XB7S0ecnzX\nudhjwJFd8c9J1vSO8723XbVa5V2PUZDt0P9EveuHe7c2zfjP81a+eqneb/1+pZ12zqfePkFnz0dR\n4ZkwERFRQNgIExERBYTd0Qmw4JYGbnxYhvfiiLn77Nsiqs/bXWTzVJKlHdTUjR9u8YmVVs13W9JM\n310HTR62O7uyt25NyLxRYmWdfJgbf97nRSvtoU3ew/qrj55jpeWAitI96w914+1X2beSZa9aHNff\najp6kxvfd6b9MpYn6k6P62/FA8+EiYiIAsJGmIiIKCDsjo6DrFMPs6Z/P/c535T30PHrBg2y8pWb\nwiczxUPzj1e78SFlIh9XXuh7IHyr2cWvW4oKbtVx3i7s4DL2E9EuXd7RjWvvsp++RPGX1zuD53Tx\nv989vt3P/yLeEGBaij3wkNc8rnnQi+ueGfe5iohnwkRERAFhI0xERBQQNsJEREQB4ZhwHKw42T6W\nqSjeOPCFy3q7cfnxs618CiqsrZd6b6d6sI7/qVgZVr5Ll3tPJWt7x99uzKdilQy1Omxw42y1x//S\nPq9W1LNT6iy8rrwb79fisVUtP9u7BWpULfu6m/2a6ovt+a1/vxcX5S1sPBMmIiIKCBthIiKigLA7\nupBSKlVy4wHHTrbStud4L5Le8NhBbpyRxdtiCiutQX1r+tibprpxxZSM0OyuX+e1cONWW/n3LwnS\nmnkv6Xi6tfeEtDe3NbLyVR/GlzQk2pBjxwbyu2mNGlrTO7p6+4fXLn8lqjKmZdm3tMm+A7HPWCHw\nTJiIiCggbISJiIgCwkaYiIgoIBwTLqTFD7R34y9r2mMQZyw+x40zvuY4ZDzMv8ce7xtTN/xYVK8/\n+1nTvC2p5Fn8H2/870jf5QBX/97LytcIfxXVLFERm/dgXWt6bp+Xovre6J013fjV2+19Rdn5wTxG\nmGfCREREAWEjTEREFBB2R0dp28X2y6HnnD/UjZcc2G+l7XzSu3w+A2sTO2OlxMzTnwv5JPxtSVWu\nt591c2Dr1gTNEQUlp9HesJ/vySwb9nMqGdIn1XPjx+uNLlQZw1cf7cZlxxaPt9jxTJiIiCggbISJ\niIgCwu7oPPif0nTzfSOttAzx/nQXzB5gpdUaxyuig7K/ThVrOn1fgwKXkb1xkzWtWVluLBleN3hq\nrZqIJLtWVWt68W1lovptzfZeSN7mxr+ttOzt26Mqo6R75YgRYT9vMC7yC9spMVLFG/5Jl8h//+0X\nHRkx7cGH3nbjXuXCDzWElv/vl0VEV/d63Oqo8hUlngkTEREFhI0wERFRQNgIExERBYRjwiEkzfuT\ndPpylRv3q7jZyvf+jtpuXOc++1imKF8ITbavRg2LuYyj/7jQmt60vrIbV6u1w42ndv0g5t/KS7sh\nA63pg+4onW8F2tv3cGv6mLL+W0u4CwvSEyPPdePzrnw+Yr6f/u9lN/73eC58adH9bl5l+HX44Vpr\nuiV+j+4HihDPhImIiALCRpiIiCgg7MsJ1am1Gz5c+72I2V5+zHv4d9XZpbObsCidMa+/Nf1Dh1EJ\n+60ph3xYqO/t1n1uvF8jD0qcMucyN942K/JtTg0mB/OS8eJmxel2H6X/9sCHNnV044qfz7TyRdmz\nSTE4aKR3O9+0i+0nlh2eEfl2o1hNy7J/6411Pdx46/Xeyx3aLAu5zS9hc1R4PBMmIiIKCBthIiKi\ngLARJiIiCkipHxNObdfKmr7mo8/D5ms37AZruul7vyVsnujfyp24zJpu/5h3+45GuRZXarPFjQty\ne1H7ny/3fmtFhYj5Dhq105uY9mfEfNWwOGxMntTK3m1hd3b7OmK+D8Z1d+ODDvDajKKWPW+RG//3\n1qustJV9vesiFp38elx/9/ph9q1HjR6d4ptKrjen8UyYiIgoIGyEiYiIAlLqu6MXXF/Nmu5bPvyb\nahpO2md/oLwBIkjN7omt6/E0dI3+tzAnpt+igsvxvblq3u76VtoJqw9145aPzXXj4nj7SWlS7vNp\n1nQr38he9wu94bz0y9Zb+ca3995Q1+evC9w4Z3htK596LxhD01kbrbRkrnueCRMREQWEjTAREVFA\nSmV3tP+B8D/0fSYktXzRzgwR/Yv6uqMXHmqnlcE/bpzM3ZClSeUPfXeThDyQ7ix4++MKWOpLWYpI\nSlK980yYiIgoIGyEiYiIAsJGmIiIKCClckx4TbdUN26cFnkM+P0d3iXy6dvtW5R4gxIREcWKZ8JE\nREQBYSNMREQUkFLZHZ2Xxze3c+NfT2zqxro28gP5iYiICoNnwkRERAFhI0xERBQQNsJEREQBKZVj\nwgfd5b2B55S7uuSRc13iZ4aIiEotngkTEREFhI0wERFRQET5cnoiIqJA8EyYiIgoIGyEiYiIAsJG\nmIiIKCBshImIiAKS9I2wiAwXkX0isjzK/K1EZKeIZIvIVRHy9BSRHCffSXGd4TgTkROc+cwRkROC\nnp9YicgDIrLfWaYKUX5nibMOjMgjj4rILhF5NH5zmxjRLE8y4TbKbbQkbaPRrJ8FUawaYRFpKSJ7\nC7HzeUpVm4Ypr7qIbBSRybmfqeoiVa0I4Od8ylyjqhVVdbxTlojIvSKyQkS2i8hHIlLZ91u5O5qd\nvn+p4Qp2ynpERFaLyDYRmSQi7X3pg0Vkk4j8JSIdfJ93E5Ex/rJU9XtneVbkszxFRkQGisgMEckS\nkeGFKGKk87ff5ZTXS0QmOn+r5aGZVbU5gMeiKLeTqt7rm8++zt94p4hMEZF2vrQ86yiUiBwtItNE\nZIeIzBGRY3xpnURkrlOnt/g+TxeRqSLSqJDLU+SSfBttICKfi8gWEVklItfmsZynishkEckUkXUi\n8qaIVPKlJ/s22lZEJjjr9t8iclYBiwjdRquKyP9EZIPz7wF/5gRtoxki8pyIrBGRrSLyioik57HM\nuY187v75LV/aRSKyVkSWiUhP3+fNnd919+UFWD+jUqwaYQAvA5gex/KeBDA/TmVdAmAAgG4A6gMo\nB+DFkDxPOStm7r/sCGX1A3AFgGMBVAfwK4D3AEBE6gG4EsBBAF4D8ITzeRqAZwDcHKflSaQ1AB4B\nMCxO5e1yyhocp/IgIi0BvA/gWgBVAYwF8IXzdwbyqKMwZVUH8AWA/3PKegrAWBGp5mR5HMDtADoB\nGCIidZ3PbwUwWlVXxmu5ikAyb6MjACwDUAfAqQAeE5FeEcqqArMO1wfQFkBDmPpN+m3Umc/PAXwJ\ns25fA2CEiLSKodjnAJQH0BTA4QAGiMjlMc5nftvoXQAOBdABQCsAXQAMyafYTr7981XO76TB1GEX\nADcCeMmXfyiAW/PYl8es2DTCInIBgEwAP8SpvKNgKuedeJQHoC+At1V1paruhNl5nC8i5QtRVjMA\nk1V1qVO5IwDkHuE1BvCHqm4H8D3Mhg6YDfsLVV0ey0IUBVX9VFXHANgcp/Kmqep7AJbGozzHiQB+\nVtXJqnoApj4bAOjhpOdVR6GOBrBeVT9R1WxVHQFgI4CzfWVNUNXVABYDaCwijQGcA7PzSgrJvI2K\nSEUAPQE8qqr7VXU2gFEwB1r/oqofqOp4Vd2tqlsBvAnTuAPJv422gTm4eM5ZXycA+AXmAKaw+sKc\nhOx2lv9tRPjbFkB+22hfAENVdYuqboRpMAvzmzUArFbVtfDVp4ic63z+W4zLkadi0Qg7XUYPAbgt\nTFpjp0uocQHKS4U5Yh8IIF5PIxHnn386A0BL32fXO11dM0XknDzK+ghACzFjC+kALgUw3kn7G0BH\nEakK4AQAc53uygsAPB2nZQmUU5/H5J8zsbOBf9enwDQKQN51lF9ZuZ/llvUXgD4i0hDmTGEJzA7j\nDlXdH+NyFIkSsI2K7zN/egdEpzuAuU6c7Nto6Lqa+5m/W70w22hh/7Z5lZfXNhouvaGIVMmjzJ+c\n4YVPRaSp89lGADWc7bM3TH1WhDmrvjvGZchXsWiEATwM5wg2NEFVV6hqVVUtyHjKTQCmqurMuM0h\nMA7AVSLS1KnkO53Pc8+Eh8Js7LUB3AdguIh0+3cxAIC1MOMJCwHsgen6vAUAVHUzgEcBTIDpMrsd\nwAvO750lIj8641oN47hsRcqpz8n550yo7wD0EHOBTxkA9wAoA68+I9ZRGFMA1BeRC8WM814KoLmv\nrNsBXAfTZX0LzBnVDgBLnbr8UUT6xX0J4yupt1FV3QFztnefiJQVkS4wPRH59mSJSG+Yg7D/AiVi\nG10AYAOAwc762gfm7NL9WxRiGx0P4C4RqSQiLWDOSAvTS+iX3zY6DsAgEanlDPHc5Hwe6Xd7wBwE\nt4EZMvtSRNJUNQdm+xwFU5dXwxxwvghzsDVRRL4R39h/PAXeCItIZ5ijybh0y4lIfZjKuDe/vL7v\n+C+minQ0PwzAhwAmwRwRT3Q+XwUAqvq7qm5W1QOq+jXMWMbZ4QoCcD+AwwA0AlAWwIMAJuR2bavq\nh6raRVVPhjnqywLwB8xRdl8AnyA5jrgDISLjfPXZP1weVV0As2N9CabBrQlgHpz6RD51FFLWZgBn\nwIzxrgdwEky3Vu668Y+qnqKqXWDG4h6C2difBjASwOkAnnXGloudkrKNAugPMzSwEsCrMNvoKuRB\nRI4E8AGAc1V1Ue7nybyNOr0vZ8IcQKyD6d34GPn8LfJxE8zB6mKYdfzDvMqL0zb6KMzffBbMgfAY\nAPthDjDClfeTqu5T1UwAg2DWhbZO2g+qeqSq9gCQAzPWPBzmOpDLYA5C3wpXbqyKw6sMe8IcnawQ\nEQCoCCBVRNo5O62COhxAPQDznPLKASgnIusANAg3wO5c6eYSkYPC5MmB2THf7+TpA2C18y8cRfhu\nH8BcoDNSVXNXpuEi8jzMmOMM33yUg7mi8GSYs+yVqrpdRKbDHBVSGM6OMZp8o2COfuF0LV4B76Kj\nqOrIV9aPMI127oUeS2Au0gn1XwBvqep6EekIYIiqbhORVQBaAJgW3VIWqZ4oAduoqv4D4DRfGR8g\nj7+3iBwC03txhaqGHQdP1m1UVefAG1uFiEwB8L8YytsCc5CTW95jyONvG49tVFX3wAxnDHTSrwEw\nswAXUf1rHy1mhXwJ5qCiJoB+JfDqAAAgAElEQVRUVf3HWTcPjrLcAikOjfAbMONvuW6H2eCvK2R5\n45zv5zofwEUAzojlCjfnLKUazMVBbQE8C+AhZ8PPHcQfD2A3zFnDxTBHxOFMB9BPRD6CGY/oDyAd\nZqzJbwiA4aq6RkQUQGsRqQOgF+J7kVJcOY1QGoBUmJ11WQAHnIsrClNeCkw3VLqZlLIAclR1X4zz\n2RXmKLo6zIY31jn6BqKvo9yyDoEZ+y0Hc6a7SlW/CcnTDqZByx2mWAbgOBHZBrMDLza3sIQoKdto\nW5izqCwA5wHo4+QLV1YHmO35RlUdm8fPJus2ejCARTC9odfDHBQNj6G85jAX7WXC/F2vga+Rj6Hc\niNuoiDSAaUjXAjgCZhjwygjltIfZfv+E2UYfgTk4C70y/yqYi+5mOfuxcs522xgJqs/Au6Odq+nW\n5f4DsBPAXudqt9yLPvLqggotLyukvG0A9jtxLGoC+BrmdplxAIap6hu+9EEwlZoJcyvD1ao6KcIy\nPAlgNszKlQkzTniO000C5zutYVbmF53lWgtzGf1cmKO0hF8wEIMhMF1Td8EcjOyB79YB529xbAHK\n6+6U8TXMxrAHwLdxmM8XYP7+C53/r/al5VlHIvKaiLzmy38HgE0wXZ31AIS77/JlAIN8Dc3dMHU5\nF8BjcVhHE6IEbaMnwuxIt8Lc9nJS7jI4y+FfL28DUAvA275u07m+spJ9Gx0A03htAHA8gN6qmpWb\nWIhttCtMA7cD5pa8/qo6N++vRCWvbbQ5TDf0Lpiz+LtU1d0vOF3eub0RdWCGfrbDrANNAZzmvzBS\nRGrC7MfvAwDnpGEgzNj/azC3L8Wfqib1P5hbB3YCWBJl/pYwlbkbwGUR8uTu9DMBnBj0MuazPMc7\n87kHQK+g5ycOyzMEZqPKBFAhyu8sdNaBYXnk2Quzs3846GWMx/Ik0z9uo9xGS9I2Gs36WZB/fJ8w\nERFRQALvjiYiIiqt2AgTEREFpEivju6d0o993wH5LueTSLdLFRrrMziJqE+AdRokbqMlS7T1yTNh\nIiKigLARJiIiCggbYSIiooCwESYiIgoIG2EiIqKAsBEmIiIKCBthIiKigLARJiIiCggbYSIiooCw\nESYiIgoIG2EiIqKAsBEmIiIKCBthIiKigLARJiIiCggbYSIiooCwESYiIgpIWtAzEITsXl3ceOAb\nH1tpr7ZskbDf3XH+kdZ01VmbvHla+HfCfpcKJvOSo6zpqU+86sbtXr7ejRs/Oc3KpwcOJHbGSri0\nJo3cuPbITDf+cWY7K1+bV7y07LkLEz9jjtRatazpzSd7+4pqI393Y83KKrJ5ouTHM2EiIqKAsBEm\nIiIKSKnsjv7nxAw3rp66s8h+d92p+6zp/QO8Y6DqpxXZbFAYaQ3qu/HD/30rYr55N7zixicPPdZK\n0x074j9jJVha3TrW9EOTRrtx6/QcNz5uc10rX/bcxYmdMR9/F3T/yb9baUeW/cyNb/jzP17CH3MT\nPl/JLLVmDWt64XON3bhnS69uV/fYb+Urqd38PBMmIiIKCBthIiKigLARJiIiCkipGROW9DJufNxx\nswKZh0p/lLWmz7vyRzeeWLWhlZadua1I5omMDSc2ceM+5fdHzNdlxvluXGvnooTOU0mU1rCBG1cZ\nudtKO7hMqhu3/v5aN255qT0WW5TmP9LUjc+rON5K6/L8HW5c/48pRTVLSWnDwKPd+P5B71ppp5b/\nNux3zqzZ15o+sHpN/GesGOCZMBERUUDYCBMREQWk1HRH7zjLe0rW0AYvunHbMQOtfC0xNWHzkFVN\nrembqi1w40mV2tqZ2R2dUCnly1vTJ940OarvZXxUzZtQjZyRwtrazXsq1pimL0fM13bIBjcuyueQ\n6VGdrOm/T3vdjXv82c9KazTM236zEztbSSm1VXM3fuu25924cxm72clBeGtfrWRN1/uPd6vagbXr\nYp/BYoJnwkRERAFhI0xERBQQNsJEREQBKbFjwtqtszX98pMvuPGI7d7tKG2G2LeZJHJs56g+fyWw\ndCqIrKPtMfhHar8dMe/uHO9xo5U/+C1h81QS+d+MBAAbz9gbMe+hT9/oxnVXFt0tP/5x4CHv/y9i\nvp1f2Y/PrLB5acLmqSSYf5d3/YT/9rNoTe36gTW96FdvOzz7vVuttIMe/cONc/ZGXseKI54JExER\nBYSNMBERUUBKbHf01rvtp/E0TPNudLj1xlPdOH3rzITOR1o9rwvrncb2E3f2K4+BgrLs7Oi7x85d\nfKZvqmQ+tSdRVr5Q0ZpefPhwNx6ywR4yavCO9/ahorzlZ3XPCm7cLcO+YabDlEvduPGLfCpWXlLb\ntbKmvz/+ed9UOTd6crM9FDQj03uL0sjm9j7Sr5XvqYdv9n/VSnty2BlunLPsn6jmt7hgK0BERBQQ\nNsJEREQBKVHd0ZuvPsqNP+n4f1bau9sOduP07xPbBe037yHv6tD9aneyXbr8BDfO3rCxyOaJgFMP\nmx0xbVvOHmt6/wPey+dT2B1dIKpiTfu3gambm1ppqXs2IFFSKtlPX1r4aDs3HnP6s26cg3QrX+N+\nfyZsnkqaTYfXsKabpnlPpbtmZXc3XnXkTitfSgVv6LDrtd4V8rdf/bGVr38lb/3obr8LB2NHr3Dj\neacm15O1eCZMREQUEDbCREREAWEjTEREFJASNSaccuYmN66flmGlvf3BSW7cEIm91SC1fWs3HnG8\n9xaWLLVfFr/iWe+S/gpZiXt7ExlZpxzmxi81eDNivlUhr+1J+fGP8BkpJl+3GWNNXzmplxuv2FHP\njfe9bT+pKlrrjvXecnXKEbOstC/qv+Kb8saBu826wMpXDYsL9dulUba9y0UOvL//nNc7unF1/Grn\n27XLjes94+2bP+57mJXvwkpfehNq30q2Pssb89e9WdHPdDHAM2EiIqKAsBEmIiIKSFJ3R6fWqmVN\nD2n1VcS8DR8ruqfdLLi+qhsfmuHdkvHy1nZWvgqj2QVdlNYflp5/JgB9v7zZmm4J1lNh1X6xnDU9\n8Q3v3pJe5ewH7b/deKIbp8C7tSnnWUVhWGUgchkf7vBuQatxT3QvnKd/q3TO2ohp2070upyrvxNd\nef9t8kXIJ5HPGX/+o40bt9o6LbofKCZ4JkxERBQQNsJEREQBSeruaClvPzblxPLb3Pjw6ZdYaXUx\nv0jmCQBqNt0S9vP3lx1q58OisPkoMcocsjVi2vx93lN72gzdZKUV5csESpq0CfbT6V445jg3fvjo\nplbaqj5el/HffV9z42lZ9lO3Lv722qh+u+W73lWyX30yLGK+p+ad6MYNZs+NmI/ytmN0PfuD9l54\nWTtvSOenww63sm08xHvJh57m7Ts7pNvdyvP3e3eXtPe9zAEAPjv5RTe+88irvYTf5uQ/4wHjmTAR\nEVFA2AgTEREFhI0wERFRQJJ6TDhnS6Y1/fDGLm58UfMZVtpP9Zq7cbzfrJHWpJE1/Uvnj3xT3nHO\nnt9qhnyTY8KJtvc0b/xpxmH+F4GnWvkW7q/txtmLliR6tkqtA+vWu3H5T9dbaa0+9eJTru2CSFoh\nultQUg72blvx364EAI9s6uDGTQZ515KEPCyNCqDuF8us6UV373PjwTXmufGdY+zrcyLdPnb+klOt\n6T03ebeknvXhJCvt8sor3XjJTd4+t/lv+cx0McAzYSIiooCwESYiIgpIcndH79hhTX+72ut++rnz\nB1ba2i+reGmvH1Xg38psZ3eZVGzqdWEdWX+5PV8RnrMjhXvwD8VgT02v2zldUiPmu2Pm2W7cDMX/\ntgbK34r7vfoO7fL89lHvJfMVVyZBn2USCB3mu2aw9+S5d55+1o1bpVewv+h7GUOLb73bi9oMXGBl\ny9nldWk/MaGvlXblmd5Q05OHeuMab3Wyu7RzZhfdrarR4pkwERFRQNgIExERBYSNMBERUUCSekw4\nVLUHvcdY9njgQivtsw7D3fjJ++2XSkdjRpY9npjtO345tMy+kNyCcBq/+Kc1zTe0JF7WmZlhP/c/\nphIAGr4V3RuWqPjadI19rcecI1924+UH9lhp5TaGbrMUbxU/8R5VeTludeMt59nb3t5tGW7cdrB3\ne2D2rl2IpPVd86zp41t613R81360G99/v32e2eBsFDs8EyYiIgoIG2EiIqKAlKjuaEzzunurnGIn\nDeh5kxtntsxAQdV4M3IX9upP21vTM48YHjZf6C1VFH+prZpb0zMOG+FPdaNxOztY+dK/t9/2Q8ln\nd++dEdPOnXWVNV174u+Jnh3y8XdNV/wkcr5o31gWui/d/plve/btjp88eLSV75V6Pd043k9OLCye\nCRMREQWEjTAREVFASlZ3dB5SJ3ndTzUmxbfsPcsr2R8cET6fdutsTcsvs+I7I4T1vWpb05GekvXS\nxN7WdEtMDZuPksfrXd+zptdme1fh1ni+fFHPDhWhWq97L/U44uSL3HhqV/vJiYNub+rGzW9jdzQR\nEVGpxkaYiIgoIGyEiYiIAlJqxoQTKuQBWSkRjm04Bpx4e6uHf1oZAMzM8p6S1PbJVVYaX+aenFbd\nfbQbd8uwbzv6LcsbB07lLUklW453c1ONZ7x63/Se/aS0+Rd4T1Hr+8ElVprOnJugmcsbz4SJiIgC\nwkaYiIgoIOyOjgf7feHI4asZAlP7uNUR077YfogbZ2/cVBSzQwnW/8If3DgnZEO8csZlbtwE9stT\nUmtU9yZq13DD7PmL4zuDVORSfvzDjXv+b7CVNu8Krzt6x6N2V3Xlft6tpkX5dEOeCRMREQWEjTAR\nEVFA2AgTEREFhGPCcZBTNvIY8MbsrCKck9JJMry3Yp1Rf3bEfJv3VXRjzWK9lHQ52d45xoaBR1tp\np171sxuPWVrPjYvjS9+p8Fq8sdKafq9fXTf+qeMoK+2kTle4ccrkorudlGfCREREAWEjTEREFBB2\nR8fBiJNes6bn7/O6py8cfocbN8aUIpunUiXbe1rOG/OPsZJuPnq5G09a2cKNGyCYp+NQ0Znf/R03\nzulu377U/iev67HFA7vcONqXylNyOLDSfjLex2f1cOMB34+00jYN3uvGtScndr78eCZMREQUEDbC\nREREAWF3dBw8tOx0a3rXKw3cuPFodkEnmh7wXr/Q9K5dVlrbxwe4scyqBCpZvrnX616cd3c9K+3X\nqW3cuM0La6y05usWunH23r2g0sH/RLTzl/ax0sYe8pYbX3nk9V7Cb3MSOk88EyYiIgoIG2EiIqKA\nsBEmIiIKCMeE4+F4+zL4ClgVISMlWvbfy6zpxv0CmhEqEmXHTnPjjWPttBb4zY0PgMi2+yz7trWp\nU+q78dbWFdy42m9IKJ4JExERBYSNMBERUUDYHU1ERKVO9qbN1vQbrQ5y42r4tcjmg2fCREREAWEj\nTEREFBA2wkRERAFhI0xERBQQNsJEREQBYSNMREQUEFHV/HMRERFR3PFMmIiIKCBshImIiALCRpiI\niCggSd8Ii8hwEdknIsujzJ8hIjtFZL+IPBIhT1MRUSffNXGd4TgTkROc+cwRkROCnp9YicgDTt3s\nFJEK+X8DEJElzjowIo88KiK7ROTR+M1t/EWzfiabQmyjrZy/QbaIXBUhT09nnd8pIifFdYbjjNto\nydpGgeiWJ1rFohEWkUkistep1J0isrCARTylqk1DyjxBRH53KnWliJwHAKqapaoVAbwfRblVVfUN\nX5nnich8EdkhIvNE5MwIyzPBWaEiPptbRI4XkQUisltEJopIE1/aYBHZJCJ/iUgH3+fdRGSMvxxV\n/d5ZnhVRLE+REJG2zt9gm4j8LSJnFbCIkapaUVV3OeVVFZH/icgG598D/syq2hzAY1GU20lV7/XN\nZ1/nb7xTRKaISDtfWoaIPCcia0Rkq4i8IiLpEZa3poj8IiKbRSRTRH4VkW6+9ONFZJmIrBWR832f\nV3XW0Uq+ZSnI+llkRKS6iHzmbE//iMhFBSzC2kadv+8wEdkuIutE5NbcNFVd5PwNfs6nzDXOejLe\nKVNE5F4RWeGU+5GIVPb9ZgMR+VxEtojIKhG5No/lza+spN5GAUBELnD2Z7ucRuXYAnzd2kad8rqI\nyE/O9rReRAblpiVoGxUReUREVjv7mkki0j6P5Z0oIhud+pwtImf40jqJyFynTm/xfZ4uIlNFpJG/\nrAIsT76KRSPsGOhUakVVbR1LQU5FfQDgXgBVAHQGMDPGMhsAGAHgVgCVAQwG8IGI1A7J1x/5vBhD\nRGoC+BTAfQCqA5gBYKSTVg/AlQAOAvAagCecz9MAPAPg5liWI9Gc+fwcwJcwy3YNgBEi0iqGYp8D\nUB5AUwCHAxggIpfHOJ8tYRq6awFUBTAWwBfiHTjdBeBQAB0AtALQBcCQCMXtBHAFgFoAqgF4EsBY\nX1nPA+gL4CQAr4pIqvP54wCeUNUdsSxLEXkZwD4AdQD0h1mOiDu8KDwAoCWAJgB6AbhDYj+jvQTA\nAADdANQHUA7Ai770EQCWwSzDqQAeE5FeBS0r2bdRABCR3jDr6eUAKgHoDmBpDOXVBDAewOsAagBo\nAeDbGOcxv220H8x2dyzMvuZXAO/lUeQgAPVUtTK8/VI9J+1xALcD6ARgiIjUdT6/FcBoVV0Zy7Lk\npTg1wvE0BMDrqjpOVQ+o6mZVXRJjmQ0BZDplqqp+BWAXgOa5GUSkCoD7AdyRT1lnA5irqp+o6l6Y\nHVInEWkDoDGAP1R1O4DvYTZ0wGzYX6jq8hiXI9HawOy0nlPVbFWdAOAXmB1aYfWFOZPa7Sz/2zAb\nXyxOBPCzqk5W1QMwO6QGAHr4fnOoqm5R1Y0Ahkb6TVXdq6oLVTUHgADIhmmMqztZKqjqX6o6G6Yh\nqyEihwNopqofx7gcCSemy/EcAPep6k5VnQzgC8RWp5cAeFhVt6rqfABvArgsxlntC+BtVV2pqjth\n6vR8ESkvIhUB9ATwqKrud+piFCKvRxHLQvJvowDwIICHVPU3Vc1R1dWqujqG8m4F8I2qvu/05uxw\n6jUW+W2jzQBMVtWlqpoNc5DVLnxRgKrOccoBAAWQDiD3DLcZgAnO32AxgMYi0hhmvX8uxuXIU3Fq\nhB93ugJ+EZGeuR+KSGOni69xAco60vnun04X4AgRqZ7fl/IxA8B8ETldRFLFdEVnAZjjy/MYgFcB\nrMunrPYAZudOOF06S5zP/wbQUUSqAjgBwFynK+QCAE/HuAxFQSJ85u+yyxSRY2Io1yqvkCRMmf5y\nw6U3dA60whcoMgfAXpgG6i1V3eAkbXC6uzoByAGwFebs+KYYl6GotAKQraqLfJ/NhllfC7yNikg1\nmAO12b6P3fJiEK7OMmDOuMX3mT890nqUV1lJvY06PTGHAqglZrholYi8JCLlfHkKuo0eCWCL02W8\nQUTGFnCfHXZWkfc2+hGAFmKuIUgHcCnM2XjkAkW+FJG9AKYCmASzXweAvwD0EZGGMD1uS2AOvO9Q\n1f0xLkeeiksjfCfM0WQDAG/AdOU1BwBVXaGqVVW1IOMpDWGO0s+B2WhCu6UKzDnSehemmzvL+f8/\nvnHLQ2G6rqL5nYoAtoV8tg1AJVXdDOBRABNgusxuB/ACzN/oLBH5Ucy4VsNYlieBFgDYAGCwM57S\nB+bItXxuBqc+JxegzPEA7hKRSiLSAubspXw+38nPdwB6iLnApwyAewCU8ZU7DsAgEanldE3lNpgR\nf1dVD4YZqrgIgH/5roWpwzdg1svrAPwAoKyIfOOMVfUILa8Yibi+AoXaRiv6yvhXeTEYB+AqMRdW\nVoHZZgCgvNPl/wuA+0SkrIh0gdk/RKrPvMpK9m20DsxZ4LkwXbmdARwC33BLIbbRhjCN4CCYnoJl\nAD6McT7z20bXwlw3sBDAHpju6VvCFZRLVU+DWc9OgTlzz3GSbofZLr9wyugGYAeApU5d/igi/WJc\nnrCKRSOsqlOd7ossVf0fzMZySgxF7gHwjnOBx06YM9SI5TkD8rkXhYW9OEHMVY1PwXRplYFpWN4S\nkc4ikgLgFQCDfN0dedkJs7P2qwxT6VDVD1W1i6qeDHPUlwXgD5ij7L4APkExPeJ2jhrPhNk5rQNw\nG4CPAayKodibYOp0Mcx484d5lSci43z12T/CfC6A2Wm8BLMx1wQwz1fuozB/81kApgAYA2A/zAFG\nRE7X9IcwBw2dnM9mqWpPVT3C+Y0rYNbJt2C6BS8H8J6IhOtFKA7yXF8LWV5uGVGV56vPnXmcYQ2D\nWTcmAZgLYKLzeW6d9ofpdlwJ02P1PiKvR3mWlczbKMy2BAAvqupaVd0E4FnEvs/9TFWnO0NsDwI4\nOlLPUZy20fsBHAbTpVzW+c0JzpBBRM5wxDgAJ4rI6c5n/6jqKaraBWYf8xBMw/w0zPU6pwN4Ng49\nqv9SLBrhMBThuzWjNccpI7ofU23vuygs0hWZnQH8pKoznDGU6TBdGifA7EAOBTBSRNYBmO58Z1WE\nRn0uzAUAANwxt+bO5/B9Xg5mZ30bzBn9SmccajqAg6NdvqLmjL30UNUaqnoiTC/HtBjK26Kq/VW1\nrqq2h1lvI5anqif76jPiVcaqOkpVO6hqDZgNugmculPVPao6UFUbqOpBADYDmOn0iEQjHd5Yod9z\nAIao6h4AHQHMcMYQ02Eu7CqOFgFIcy6UydUJIetrtFR1K8xOtZPv4zzL89VnxUhn3M52eb+qNlXV\nhk55q51/uTva01S1lnNAVAMR1qP8ysqVjNuo8/dfhQLsI6MQus/NjcPux+OxjcKsMyNVdZWaa3+G\nw1yLEXFcOEQafNf0+PwXZjhpPbxtdBvM36xFlGVHLfBGWMxtGic6XURpzlFRdwDfxFDsOwAuF5GD\nnKOiO2Gu1o3FdADHikhnZ74PgenKmQPTlVYfpqHuDO+IsitMQx3qMwAdROQcESkLU+lznCM/vyEA\nhqvqGpjbG1qLSB2Yq0kLfSVjoonIwU59lheR2wHUAzA8hvKai0gNZyz+ZJgrG2O+h1ZEujpl1oK5\nqnNsbh2IuZ2lvhhHwlzJfn+Eco4UkWNEpIyIlBORO2G6/KaG5OsNoKyq5q6LywAcJ+Yq4wyYhr7Y\ncYZcPgXwkIhUEHP71RnI+0rU/LwLcxVqNTEXJF6NGNYRwL2NqrlTZ+1gzu4eyu1yFHPrXCWnni4G\n0MfJU+CyfJJyG4XZR94oIrXFjNHfjNj2ke/AdMV3FjM+ex/MRVOZscxkXtsozD65n4jUEZEUERkA\nczD7d5hy2ojIyc72me7Uf3cAP4bkawfT2/mq81HuNloH5iAr/reZqWqg/2CO/qfDdEVlAvgNQG9f\nemOY7qvGEb4/HMAjYT5/EMBG5997AKpF8z0nrSnMkVxayOcDYSp4B8wGdlu034c5ku7vmz4BZvx0\nD0yXV9OQMlo7fxd/GYMBbILpkukYkn85gBOCrk9nXv4P5uKjnTBjay1C0ncCODbCdx8AMCLks/MA\nrAGwG6Z7+MRovheSrmHmY7JTl1tgNvAKvrTuzt90N8yYU/+Q744DcI8T94C5sCi3rB8BdA/Jn+HM\nexPfZ8c7v7EWwAXRrp8B1Wl1mC75XTA7oot8aQXeRp2/xzAA2wGsB3BrmO9NAnBVhDJ7AlgV8lkr\np652A/gntEyYhmajswyTARwaab3MrywnTzJvo+kwQ2iZMMNGQ2EOEAu1jTqfXwfTU7AV5naiRtF8\nz5de0G20LMytc2ud9eh3ACf50l8D8JoTt4U5KM5tZ6YDOCvMPEwEcIRvupNTl5vCrE95Lk/UdRH0\nyhCHlelNZ4VZEmX+DKcSdgG4P0KeJjBXuWYCuDroZcxneY535nMPgF5Bz08clmeIUzeZ/g0un+8s\ndNaBYXnk2QvTY/Fw0MuYz7Lku34m279CbKMtnb/BbgCXRcjT3VnnMxHmoKw4/eM2WrK20WiXJ9p/\nfJUhERFRQAIfEyYiIiqt2AgTEREFhI0wERFRQPJ80UC89U7pxwHogHyX80ncHwTB+gxOIuoTYJ0G\nidtoyRJtffJMmIiIKCBshImIiALCRpiIiCggbISJiIgCwkaYiIgoIGyEiYiIAsJGmIiIKCBshImI\niAJSpA/rICKi0ielfHk37jplh5V2f61Zbtxn3tluXKb3P4mfsWKAZ8JEREQBYSNMREQUEDbCRERE\nAeGYcAKk1a3jxvta1o/qO+mLVlvTC+8+yI2rzvOeA159/l4rX8rPfxRmFomSxt6+h1vT5cb97sZ6\naDs3XnZ6BSvfscf96cY/T+gYsfx6v2a7cdmx0wo9n2TzjwMveqO1G4+p9YaVL8cXr5xdz42bg2PC\nRERElEBshImIiALC7uhC2nbxkW68+RS7i/iuQ8a78SWVv46qvLe3Nbamz670mRtX61c24vdOa9A1\nqvKJirvUmjXcOHtkOTf+qOWzVr712eluXCVlkhs3TiuPiC79KWLShot3u/GaoWWstP88NsiNa7z5\na+Ty6V+W3tvJjef1GurG/ZeebOXb/GgzN24+/rfEz1gxwzNhIiKigLARJiIiCgi7o0OkdGrrxgtu\n9K62/LnP81a+WqnTve/E4VjmyiorQj6J3AVNVBItesEbklnY5m1fit3NXDvVi1/JbOXGv++wh3RW\n7aoa8bdSxbsm96vWY8OWDQAjh/yfG187f6CVljJ5FiiyfbUPhP18zs8trelm40t3Nz/PhImIiALC\nRpiIiCggbISJiIgCwjHhELuaVXLjRSe/6ksp9+/MMXot03sq1vv/HFaoMqrg73jNTomX0tl7utLe\nuvbTlZaf6T2V7NzDp1tp+9UbKJz4nvf0pno/brPy6R9z4zKfpYUe1cmaHnn0674pb9c0fo89JvzE\n4EvduNLcTV7Cxi1WvpStKyP/dopXp62eud6N5533opWveXpFN94zZLuVVuUy78l4B9atj/hbpVV6\nxX1uvCPHixt/lxXE7BRbPBMmIiIKCBthIiKigJTY7ui0hg2s6fl3NnTjOlO8rsfKH9pPaEnJUjde\ntN/rQll5wL7doVFaptb5rmwAACAASURBVBtf9telVtrW+d6Tf+pM98qrOsXuHtOdO924Sia7leNB\nu3W2ppfe4MUfHPWmG3ctE3IvSrQGew/433P7PivpjUyvu/uV2T2stJZXznfjnL32E9ZKq/1V7KdT\ndS7j7Y5y4G03g9+5wsrX6LMpbpyNQsrxvtniFm8f0LaMfRvSnDNecOMfO46y0rqd4HVjVxnB7ujU\nFs2s6bndh7nxoDXHe/km/g7y8EyYiIgoIGyEiYiIAsJGmIiIKCAlakw4tWoVNz78q2VW2piaX7hx\ntxn2uI9fxjjv9pTBp17mxtlzF9q/1dZ79Fr1hUustOo5i8KWHf4hblQYOcd4Y7/LvaE5fNXtZStf\n8zT/rWXeOPB3e+xbzu6Zd6YbZ66wx///OtO7beW+9d7bs56qO8PK16mc9xLyZw8faaXdfctlbtzw\n8SkgILusREw7eMplbtz40aL7e7W8Yao1/eUJ3kvm+1XcbKVlnr7LjauMSOx8JYOFD0R+TGhRyjrZ\nu91zR6PITVytmfYtZzozmFsMeSZMREQUEDbCREREAUnq7uiUsvabhrJGed3R99ScYKW1/tTrs2zz\nmdftkNctDqFd0Fba/MVRziXFw9IP7FuP3o94u5HdzXzhst5uPH2BdwtFm0HzrXy1dnl1XSvkt6/t\neoIbb7ipiRvf8qp9m9OQOpPc+Oc99ay0WQO9Lu0zR5zhxgdWrkJp1fruyN1/qTMrRUwrSvdO94Yp\n+vV620q7of1PbvwlqhXZPBVXzx0xMmLaLx90ceO6iH14Ycn7h1jTLxzxoRt3LDPZjeukZkQs4+/9\n9gDhGaNucePmt/8Wmj1heCZMREQUEDbCREREAUm67ujUal63z4KHW1lpC9u+4sYzQ54R3uahpW6c\nvd2+Ko6Kh5QK9ksVFj/U0Y3n97Cvek7xXek83feUs/6f32Dla/2g1+3cKtO7mjkH0etYabUbf5fm\ndWnP+L+uVr4az3pX1p5ZIRO2yFcClyYpB7dx455Vv7PSFu33niRWc87+IpunvFT70Tfk1Su4+Siu\nUitXduMKKfZO99s93vZc97nouqAl3XuK2r5eB1tp9776jht3LzvTSksXb38wLcvrgr5kQT8r363N\nvnXj0yvsttJeOdMbbnh+2FlunD0v/N0u8cIzYSIiooCwESYiIgoIG2EiIqKAJN2Y8JqL27rxwrPs\nF3B/scsbL377tN5WWvZG+6lWVPxknt7Rmp7Q72k3ToH9Yvcf9njjPk9c773FqsW39q0F0b5lR9K8\nTSGldXMr7a0x1d34/979nxt3LLMhpBRvHlPFPr7tOPUiN26wofSui4sv9Z6qdEHFjVbaMXMGuHHl\nr6eDir9lN3dw42PK/mCltZt4iRu3wB8Ry/C/fWnhDXXceN55L4bLDgD4YU9Fa/r6by5z4zYvbHLj\njEX2tvYyvOuIXvyhkZX2ZZtP3fjxxt7trmXmRZyNuOCZMBERUUDYCBMREQUk6bqjdxyxJ2LaC8u8\nF0eXW1R6u/ySldoPoMJejXxbz44c78lY647wbmvYc/bhVr4WLdeG/f62vfbT1vo18V40fkPV96y0\nGfu88rtl+G9usrvI/X7Za98E1eARb1k0Kys0e6lxy8lfubH/liQAKPNyDd8Ut99kIAdHvt0zfUm5\niGl+/hc/LOjl3YoYehth/6Unu/H2OxpYaS1/9W4PjHYI6u+lde0P2oTPl2g8EyYiIgoIG2EiIqKA\nJF139Ifd3vBN2ccQo9p5L/U86tnbrLRmX+xz49RJv4OKn2qf2w/0v+aS/m48oo39wtbTK3hPyTrn\nOu9Jadka+VlYWeo9sD1D8lr17TS7C9pzIKTjq+ecC9y4+g12mi4N5l2lxdnrm7tb02W/nBbQnFBh\ntam9vsDfka7trenPjnnVN5XuRu0nXWPla3ml9/Q72Tu7wL+bn/9u8N5DXHbSn25ckKfrFQbPhImI\niALCRpiIiCggbISJiIgCknRjwodneGMG+9Ued6uW4t12suB8+607+8/z8nb44Vo3rjLdvlVlZ0Nv\nrLGy9+Il1JyzK+I8bTrYfvtPnUnek5SyeatU1HJ27LCmM/p409fUOdtKm/9AUzfu09Ubv1m0rbaV\n75/VNd04tYy3Dpzeeo6V76m6M1BQ7SbaY1atb/PetnRgfejTtEqn1KpVrOlKKasCmhNKhIblvbeF\npYSe04kinEU3ZVjTbdO9fXrX6Re7cfP+9lO24j02m15xnzW964A3Xzl794ZmTxieCRMREQWEjTAR\nEVFAkq47utnYq9140WmvRf09/0ufF57wppdwQlxmyzLtLu/pSDfP8922clpiXw5dkmWHdO+2us6b\nXu77vAz+sfK1DJnO9e1n7azpvLqjlx/wXv595ot3eGU/b99Sk33gAMi26kr7dpT+lSa68e+7mhbx\n3BRc1inbIqbtzikTMa20yFHvPC4ntMM4whPv6tXJtKb932tXy7vlaWsc5i+U/2URc7sPs9K6zznP\njSsX4RPbeCZMREQUEDbCREREAWEjTEREFJCkGxNufYN32fqJn9i3iFzy0lg3Lp9iv6nmtPLeC8T9\n48OJcHiGd2n+5EPed+P2/3eTla/54F8TOh9kW/bYUW78+2HPhaRGHt879ylvHLj+y1PcOPwNGJTM\nDhzX1Zr+6JCXfFP2rTWfPem9ta0KfkvkbJUoVa+0b/+Z+rN3i9JLjb19+FFP3m7lazXUu77jwOo1\nhfrttiO9MtZn22/kK/tCdd8Ux4SJiIhKPDbCREREAUm67mj13QaS/v1MK+3DNvUjfm/oud6tQtnp\n3qXzR99u32byRN3psc6ixf8UmYadwr9gnhJnzeCj3fib/k+5cTkpH/E7L2xtYU3XfWeWGyf6jSpU\n9Pxd0FsG2U/Ga5PudUFfv7qblVZ1pPc2ttIyNOG/xQcAuleZUOAyQruSnzzhTDfuNNp7TOFfFw+1\n8l3fo5cbrz21upWWvXmLG2cO8Iadjrl5qpXvv3V+ceOuH9nd3c3HBzOkwDNhIiKigLARJiIiCkjS\ndUcXVoVRU8N+PrbTUdb0EwO87ujd6j3gu+tP11n5mrzlXWG96abdVtqMw+wX0FPR2d/nUGt6zECv\nC7pxWuQu6BW+p2J9cefxVlrG7vgOUZQmlZfbL1nxP30sSJLm7foyb/FeFDKjy0dWvu/2lHPjRffZ\nT/8qs7/gL/1Idtl/L7OmP1p3uBuf1Xy8ldbkmBVunFq5slfG9u1WvgNLl7vxzEO888LuA+y7SarP\n8Z60JTX3W2nLXmrkxnO7e1e0h14B7e+Cbn578biinWfCREREAWEjTEREFBA2wkRERAEpNWPCkTT+\nxn6yFgZ4YXnxnqI0v8fbdrYmvd3466bfhJQa/thmxTr7svqW1vt/KB6Wn2Y/Da1phHHgtdn22OQl\nN9/mxuW/Cn/9ABVchdH233L8w23duHnZjVba4oYd3PjAqtUx/3bOMZ3deNn1dto5bb3bzh6rbY8D\n+z12+6VuXO6baRHzlVZ7r/LGep8d3cZK+7LN52486Afv9q5pr9nX4VRcE/7tYxsPs28IPOwm7/al\nZ+pPttL8t4K+sa2pGw9/+jQrX/Nhxe8phTwTJiIiCggbYSIiooCU+u7o9BmLrekjf7/QjX/r8mHE\n773X9DvflH0sk6Xe5fOnzfOe1NXmJvuh4PbNG1RYqTW8bv4/zn4+JDUD4fScPNCabv4Zu6CL2vVV\n7dtd1n/pdW3O2NI45vKfaPaGG3cuE3lXN3OftyUOmHalldZ8wgI35vb6b9mLvH3aT2fYt3BV+8p7\n+thz9X/2Eh76GZH4u5VzCvB8ug6TL3fjFrducuPqq4tf93MongkTEREFhI0wERFRQNgIExERBaTU\njwnn7NhhTde9sZob9x12uhvf0/QrK99RGd4I0eidNa20e78+341b3OI9Go1jSvGTWs2rp5unemNM\nFSX8GDAAPLnZuz2m5dX2tQB8O1LR8N8ysmHQT1bag7VmexP+uNC83duBkK1vtvdEWlw80ns8YrO7\n7DFEbrPR8z9+EgDG9PRuORt6ufempF3N7EdOfnOSdx3Hid/c7CXk8Wqq1m/ttaabTp/jzUc0M1uM\n8EyYiIgoIGyEiYiIAlLqu6NDHVjuvfkDx3nhTTfZj9zZcZj3do42QzZZaS3+KR5v5yjJNp3uPZ2n\nT/mJbpydRxfW1w/2dOMKu3hLUhCq+55YNP2nVlbas2O8LsZbq9nDBYXR5scr3LjMn/aT0xo+PsWN\nm6H438aSjLLXb3DjBk9siJjvRnhP02qF6N5YlsdmnnR4JkxERBQQNsJEREQBYXd0lOoMnWJP++Jk\nuxqvJDjn9u/dOFsjX9vcYuy1btxqNLugi5P/b+++o6Qq0jaAPy8wDFGSAhKHICAZEcVAFBd1F1ZW\nXcWIiWXXHFhcxQXT6urnYs5gjqwi4FkzYEYESZJUogEByTnN+/1xa+reartnerp7pmaY53fOnPPe\nrurqe6f63uqquiH2AfEftK8exjgi7fKbY07BmYg8Y0+YiIjIEzbCREREnrARJiIi8oRzwlQqdaoc\nXkpWXsLfktN3ufc4ant3eGkE5+6JqKRhT5iIiMgTNsJERESecDiaSqWrXwwfvr740kdsfNG4K5x8\njZe5l5YREZUk7AkTERF5wkaYiIjIEzbCREREnnBOmEqlpqPCud7+ozrbuDE4B0xEpQd7wkRERJ6w\nESYiIvJEVA+kxyMTERGVHuwJExERecJGmIiIyBM2wkRERJ6wESYiIvKk1DfCIjJaRPaKyDYRqZrk\ne5aKyB4ReSGfPCoi20XkjsytbeaJSLbZ9r0icrvv9UmFiDxj6mNFkvlbmW3eLyKXJMjTW0RyTb6T\nMrrCxag01m9Z3ycLIiJTRGSXiHzqe11SUdb3VxHpZ9YzV0T6pVteiWiEReRw88XcLCLfi8igQhbx\nqqpWU9XtpryaIvKsiKw1f6OjmVW1BYB/JVFuJ1W9KbKeA0TkG1MBn4tI20hatoiMEZGfRWSjiDwi\nIlkJtvdgEflMRNaLyCYR+UJEjouknyAiy0VktYicGXm9poh8LSLVI9uyW1WrAXgxie0pMiJSW0Qm\nmIPkShE5u5BF3K2qOZHyskVknIhsEZFfROTavDRV/dZs8ycFlPmz+V68Y8o8VEQmmTpSEcmJZs7v\nM036CSKyWER2iMhUEWma6INFJMfk2WHe0y+mnBJdvyJyuYjMFJHdIvJMCkXE7pN9zP9jc7yDdxr7\n5BMissQcEIfE2Y5rTF1uNnWbHUlLWEdxykn43RCRxiIyXUQ2iMi9Me97R0SOjNnWvgCGJbGtRUZE\nppkfAtvM35JCFhG7v+Y1zNsif+WBtPZXEZGbRGSV+b+/IiIHxWxHP7PPbBeRH0Tkzwm2t4+IzDfH\n2/XmWNUwkj5cRH6V4PjePvL6cSLyZrQsVf3AbM8qZID3RlhEKgCYCOAtALUBDAXwgoi0SqPYMQCq\nAMgBcBSA80TkwjTX8zAEB8JhAGoCmAxgkll/ALgBwJEA2gNoBeAIACMTFLcNwEUADgFQC8C/AUyO\nlHUfgAEATgLwaN6XGcCdAO5S1a3pbEsReRjAHgD1AJyDYL3bpVHeaACHAWgKoA+Av0v6v5BzAbwD\n4LTCfqaIHAzgDQA3I/iezgTwaj6f9TKA2QDqALgJwH9F5BCTVhrq92cAtwMYl6HytpuyhmeovDxz\nAfwNwNexCSLSH8F+eQKCY0FzALdEsuRXR7FGI/H38R8AngXQDMCpeY2u+YG1TFVnpr55Repy0+hV\nU9XWGSjv7kh51VR1f5rlnQ/gPADHAWgAoDKAB/MSJegEvYSg7moA6AxgVoKyFgLor6o1TVnfAXjU\nlHMogIsRfD8eA3CXeb0CgHsBXJ3mduTLeyMMoA2Cf8oYVd2vqlMAfIbgn5+qAQi+EDtUdQWAsQga\nvXT0B/CJqn6qqvsQNJwNAfSKfOYDqrpBVdcBeCDRZ6rqLlVdoqq5AATAfgSNcW2TpaqqfqOqcxE0\nbHVE5CgAzVT1tTS3I+MkGHI8DcDNqrpNVT8FMAnp1eH5AG5T1Y2qugjAkwCGpLOeqrpGVR8B8FUK\nn/knAAtUdbyq7kJwUO4kIm1iCzE/II8AMEpVd6rq6wDmI2z8S3z9quobqvomgPUZKm+Gqj4PYFkm\nyouU+7CqfghgV5zkCwCMVdUFqroRwG0w9ZlEHcXK77vRDMAUVd2M4LvV3PTYbgBwYwY2s6wagKD+\nflDVbQiOuWeKSBWTPhLA46r6tqruU9X1qro0XkFm3/858tJ+AC1N3ATAbFXdAuADBI0xEDS+k0wb\nUmRKQiMsCV6LDglsEpHj0yjXKS9FEqfMaLnx0huJSI2EBYrMQ3DwmATgKVVda5LWikgnEemEoPe2\nEUHv6co0t6GotAKwX1W/jbw2F0A7ABCRJqYOmyRTmIjUQvDDbG688opCEp/ZLppmhlmXJlindgh6\nQNEebbSs0la/v5HiPlncnDozcT0RqYOC68hK4rvxDYATRaQmgtGwhQga/PtUdVOGtqUo3GmGYD8T\nkd55LxZ2f434mxmSnyUiiX7MFEa8Y2o2ghEJAOgOAGaYebWIvCAitZFA3nYB2AngegB3m6TvAXQw\n9dcPwAIRaQzgLAD/l4HtyFdJaIQXA1gLYLiIZInI7xD0LvN+7UBVa5reVbLeAXCDiFQXkZYIeqRV\nCnhPQd4H0EuCEwgqIviFWzFS7tsArhKRQ0SkPsIDasLPVdWOAA4CcDaA6PYNA3A/gCcQ9Cb/CuBD\nAJVE5F0zj9UrtjyPqgHYHPPaZgDVAUBVV5k6THYOpVqkjN+UV0QK+sx8tzFOWfnlLW31+xsp7JM+\nxNZDXlw9TlpeeqL6jL4/Nu+dAHoA+AjBtEwWgI4IppheEpGPReTyVDeiiIxA0ONriOB7OFlEWgAp\n7a9AMPJ3GIC6CKZsnpHIeS4pehvAJRLM3dcw6wyEx9RGCPaf08xnO8PVsfK2C8DBCHrRi83r6wHc\nAWAKgN8jaKDvN583SEQ+EpGJItIoze2Jy/tTlFR1r4iciuCfNwLBXNtrAHanUeyVprzvEAynvQxg\ncKLMIvI2gp0IAP6iqr85CUZVF4vIBQAeAnAogBcQ/OL90WS5A8Fc8Ryz7k8C6ILgB0ZCZmjzZRFZ\nJCJzVHWuqs4B0Nus26EI5iWOQbCTX41gvu5jEWmqJeO+o9sQ/JiIOghAqnOb2yJl7IrECcsTkW2R\nxbaJ8qXxmYXZxnzzlsL6LXbJ7JNJiK2HvHhrnLS89ET1mZf+m++Gqm4AcKZZ73IAPkbwQ+sGBL3k\nIQC+FpEpqrowhe3IOFX9MrL4rIgMBnAK8mnECigvOif/PxF5EcEUzmfx8ie5v44D0BjANARt1b0I\nhqjzjrk7ATydNwInIv9CMJxc0LpuEJFnAcwVkYZmKPtlBO0EROT3CI7hsxGOeAxE0Cs+q6DyC6sk\n9IShqvNUtZeq1lHV/gh+oc1Io7wNqnqOqtZX1XYItjNheap6cuRkgoQ7u6r+V1Xbq2odAKMQnKTx\nlUnbqaqXq2pDVW2OoPGfVYiTE7IQzkVEjQEwUlV3AugAYKaZo8hCcGJXSfAtgArm5LU8nQAsSKUw\nM3+32pSRVHkxJ4QU+qzFJD5zQTTNzIO3SLBOCxDMC0Z7VYnWvzTUb7FLdp8sgFNnJl5jej5J11Eh\nv49DAUxX1W8Q1uceBPPN6U6JFSVF/KnBIikvmf1VVXNVdZSq5qhqIwT/75/MHwDMM5+TigoIeu2x\nZ1tXRnCW/nUIetc/mLnirxCMbmRciWiERaSjiFQSkSoicj2CnuYzaZTXQkTqiEh5ETkZwY6R9jWW\nItLVlHkIgMcBTFbVxSatoYg0kEB3BEMyoxKU011EjheRiiJSWURGIDir+MuYfCcCqKSqb5mXlgPo\nK8FZx9nI0Ekz6TLzo28AuFVEqpphqD8CeD6NYp8DMFJEapmTny5FGt+JPCJSCcH/DgCyzXIynzkB\nQHsROc28558A5uXVf5T5ZT4HwCjzvR6EYAd+PWZdSmz9ikgFs53lAZQ325HyyJmIlDPlZQWLUslM\n66S7nhVNuQIgy5Sbd1x7DsDFItLWzOuOhKnPZOsoosDvo4jUBXAZgpP2gKA++4hINQRzxRk9KS1V\nElwK1z+vTkXkHAA9AbybRpmni0g1U8+/A3AugnNd0lnP2uZYLhKcCf0fALdqcEIrADwN4EIRaS7B\nyVojEFxlE6+sP4lIa7N+h5iyZptRjKiRAJ4xJ3GtAtBaROohOCO+aOpPVb3/AbgHwckp2xDMA7SM\nSd8GoEeC944G8ELMa39GMKS3A8GO1j+Z98Wka5z1+BTBENQGBI1w1UhaTwArzGcuAXBOzHvfBnCj\niXshGObIK+sjAD1j8mebdW8aee0E8xmrAZwVk/8ZALd7rMPaAN5EcCnKKgBnR9KamDpskuC9v1l3\ns/3jAGwBsAbAtXHeNw3AJQnK7A3gxwT16vwl+5kITtpYjGAYbBqAnEjaYwAeiyznmDw7zfehX2mq\nX7N/xP6vRkfSC7tP9o5T3rSC3hen7mL3yWlxyu0dSb/W1OUWBAft7GTqCMFldgsK+X18DsAZkeXG\nCH5YbwRwb0zeIQA+La76jPnsQxD07LYC2ARgOoATI+mp7K+fIJgn34Lg2HZWnPdNQyH2VwQnfC5B\ncExdmeB/fguAdebveQC14n1HAVyB4EfRdgC/AHgFkX3P5Glt/i8VIq8NB/ArgqnHDjH5VyBmv06p\nPnx8CTL8hRpp/rGbEGkUC3jPElNB4/LJs8t8qW7zvY0FbEu22fbtCC638L5OKWzDk6Y+liaZ/zCz\nzTsADEmQp6c5uG5CnB9hpeWvNNZvWd8nk9jW900D+KHvdUlx/cv0/orgx3LeWdZ90i2PzxMmIiLy\npETMCRMREZVFbISJiIg8KdbrhE8sdwbHvj15P3d8Ji8/AMD69Kko6hNgnfrEffTAkmx9sidMRETk\nCRthIiIiT9gIExERecJGmIiIyBM2wkRERJ6wESYiIvKEjTAREZEnbISJiIg8YSNMRETkCRthIiIi\nT9gIExERecJGmIiIyBM2wkRERJ4U61OUiIgy6fsx3W289MzHnLTzV/a08ZpjthTbOlHh7Ovb1cbL\nB4VN0nUn/M/JN7TGChuXg/uAolyED4satbaLjSevaO/ka3Bn+XBhxvyU1jfT2BMmIiLyhI0wERGR\nJxyOpgNahfr1bLz5uBwb/3Si+6zz5QOfsPFe3e+kHTfnLBuv+6GWjdve9YuTb9+KVWmtKxXecd0X\nJkx7runHNu4x6C9OWpUJXxbZOpVVP4041lneftgeGw/uOiPh+26pG+57uci1cbmYPmI07fBpQ520\nupOybVz91ek2boDE34+Sgj1hIiIiT9gIExERecLhaCr1JDscilp2yxFO2kOnP2XjXpV3JCxjr4a/\nR6PDXgDwSeeXwoXOkbDORU6+JmcktbqUQdEh5/z83NM9m7blhKJYm7Jt7pUPOcvRM5bX7N9p40fW\nu8PWrd4OpwqqflfRxpV+daeM6oz9wsYtMDu9lS1B2BMmIiLyhI0wERGRJ2yEiYiIPOGccIz9vcM5\nxQr/XGPjya0nOfmyJLzzSn6XtNS5KcvGsuInJ9/6AW1tXPvNb5y03K1bC7PaZdqq4eEdd+afd39K\nZVy48gQbj236flLvmXPsOGd5ILql9NlU9FpeM73gTJSWnvNPd5andHjVxtF54Fld3L5fK8ws2hUr\n4dgTJiIi8oSNMBERkSdlcjg6eknL1oGdnbRRd4ZDjNFLWtyLVoC9kbPn87uk5Yibh9i4U333N8/E\nnPCU/m41r3DS6j34efyVJwCAHtPJxuMuerDQ7+/49JXOcrPbvrZxmzGXOWmL//hwocsnKmtqXrrH\nWX7rwzo2PrXmLBvPOfxsJ9/+Rd8V7YqVcOwJExERecJGmIiIyBM2wkRERJ6UyTnh3b072HjKfQ8l\nzDd1ZzUb//N29xaFWTs0Nru1pWn426Zi5E6Jf7/evaRlc+4+G1db7V7mRK7oHDAA6O0bbNw1nOL/\nzdz9hG11bTxuyEAb53zpPtVFc8P/f+tr5jppJ7/5Vxvf9lj4xJcjs9066/dNeFnZB+2rx24CFYEW\nrw6z8dIzH0uY7/sx3Z1lXrKUeft++NFZvmHCOTZeeG54nN1T3903yi8q2vUq6dgTJiIi8oSNMBER\nkSdlZjg6Opx556OPJ8w3eOkpNt4yqrGNa039Il72uGq0bGbjzuOX2vjwiu5vnjYTr7Fxq//yIeP5\nWdutqrP8VZtwaD9697LNue5lEqNeC+9elvNFcnWou3c7y1nvhXf0OffdcPhzwQB3KmN47bCun3z5\nAiet2WB3iJsyI78haPIs8uCqcpGF9e0qOdlqS1ckI3tmeCnT/i1b0lu3EoQ9YSIiIk/YCBMREXlS\nZoajN94UPlQ6ejbtKYv/5OQrf/1BYTz7a6RiU9d6Nh5V97WE+Rq/l1LxZVK5fuud5ehdyqJ3L7tw\n2UAnX87NyU8jJKPVX8Ozqh88vp2Tdm3txTY+p+1XTtrnqAiiA1mFxo2c5btOfdHGuQh30un/cB+y\nUi7SF4zu1+Vi+oi9559h493j3X2vztjM7ufFiT1hIiIiT9gIExERecJGmIiIyJMDdk54+SsdneUF\nXZ628Y/7wvnhcjfVcvLp7HmF/qzoU5kAoOXVC8PyI79zog+OB4DKb7p3bSJXhYYNbHxd6w+Ses+y\n8Yc5y/WwLqPrFDVuYj9n+doLFyfISXRgis4Dn/KuexnewKobbTxqbRcbT17R3smn02vGLXvgWZ86\ny9c2D48Bp966yUnLvTWccz7pvKE2jl7WBJTMS5vYEyYiIvKEjTAREZEnB+xw9Plt3aHe6KnvK/eF\nlyFheuGHnwF3CHrJfe7DBSY2CR8CH32gwMp7Wjv5qoB3ycrPxuOb2Pj0ahMT5hv6Q28bN4zcoQwA\n9sGP9pXdm9nPu4DatwAAB1RJREFUaN7XxvuWrSjmtSEqGts6h1NGQ2u4+2jPeX+28UEnh/tlAyxE\nMmb92+0jzm3Uw8YjL2nqpHU/ab6N33k+fMjKw5taOPnevjAsAzPmoyRgT5iIiMgTNsJERESeHLDD\n0ZlWvp07lLzoiho2Xjzg4djsVvSZxNU/X+6k8QnC+Vt3hBScCcDSuw63ceVfSsYZ53+o6t7h6z9H\n1rdxNQ5HFzs+P7hoVJoc7m9/mOw+iOEgLI3NnpZ9P/5k4yajf3LSfh4dxl1GXGHj2DOsb3s1fPDL\nPy4e5qRVmDIrA2tZeOwJExERecJGmIiIyBM2wkRERJ4csHPCry/v7CwPrxOejt4le7uNe8zblVR5\nR1V5w1nuUzl8X25s5ojr5p5u40ZrFiT1WRTYXyXxE1WiSsqdx7KkvI2jT3YiouLT8N+f23jui42d\ntEPf3WzjW5960km76o7LbFycT2ViT5iIiMgTNsJERESeHLDD0fXPdU9hH/jmIBu/1Sa8s0t0mLow\nekROg88d7F6O8knnl2xc98kqKZVPQMeOK2ycm++gf8mwV8OLzkrD+hId6KKXNQHA+Bv723j1aPey\ntUdGPmDjCxpfZeMmoz9HUWJPmIiIyBM2wkRERJ6wESYiIvLkgJ0Tzt261X3hhHC576C/2Xht18S/\nQ2otCq8zqfGiO3+w7vndNl7c+RUnbezmHBtXWbDaxr6e6EPFb+W+Pc5y5XV7EuQkouJSeWJ4OePc\nWYkvX5pz6f02Hji6W5GuE3vCREREnrARJiIi8uSAHY7OT5UJX9o4Z0JqZSzu+5SNYy9HeXhJLxs3\n+CG5B1hT6XPJqe8lTPvj08Od5SZTi/Yyh7Lq/JU9bfxc048T5vt+THdnmU9VotjLlx6Y28fGw3ot\nK7b1YE+YiIjIEzbCREREnpTJ4ehUlG/XOuaV8AHQsWfC1nugUjGs0YFv+z8b2Hjm0+WdtCOzw7tT\nrRrfwcZNzkjtDmip6FZ5ubM8Y7fYOOeeuU4a759FVMIc1cFZfL77WBs/vKlFsa0Ge8JERESesBEm\nIiLyhI0wERGRJ5wTTtKyURUTpp0x+xJnuf7Ur4t6dcqEch/NtvFl913upH014kEbv3/0ozYe0udK\nJ1/5DNfF8lc62vi4SrOctGNnD7Zx7e3fZvRzKbRj0NE2fq7p4x7XhKJW3nKss1zp1zCu92DJuESv\nfNtWNt5y63YnrVGFnTZ+Z0iPSErRnmfCnjAREZEnbISJiIg84XB0PvSYTjaedPQjManhZUjyYa1i\nWqOy69BpG5zlI/uea+OZ3V6w8Y+93cvDmk5N/7O3nxYOf752dPjg7y92Zzv5at/OS9OKQ7O/L/K9\nCmSsv/gYG8+/5EEn7fBp4TRdPTcpbRUaN3KWV57dJG6+5qe4d766sfHLNp6+070MadDo8C53tb/6\nIt1VTBp7wkRERJ6wESYiIvKEjTAREZEnnBPOx9puVW3crII73xd9clKFXVps61RW5c5b7Cw3vCm8\njeiECbVtPGnIPU6+kw6+1saHXfYlEpGu7Wy85pgaTtrj14UP+D68Yvi7tc3koU6+VtNngDIvekkS\nkPxlST0u+4uNW07gU5OKWpa4t5Zd1Dt80tzs5eHx8uwvLnXySSTu2fx7Gy/ZVNfJN7XDeBuXg3vp\nYS40khaW+MimZk6+wVPC70Tb0audtNo/Ft88cBR7wkRERJ6wESYiIvKEw9H52HVwOMSRG/McnPs2\ntLVxnSf9DGOUZfsXLLHxsyeFD+N+/Am3nt75w39s/FqPrjZ+5aW+Tr6nhobXUHTJTvzMo5MWnm7j\nNo9uddL4pKTi1+LVYTZueY075FwFiacfKDPqjA2PfcduH+akrR2wO+57nj1mrLN8VHZ4nI0+vSjX\nGah2L3nKXe/ewbD5hL1xP6virO+d5VZbZtp4X9x3FD/2hImIiDxhI0xEROQJh6Pzce6piW+3NG5i\nPxvngMPRPu1btsLG2YMPcdKGdbnKxlkjfrHxrCvud/K1mXxZwvKbvREONGdPnWfj3L17Cr2uVHhV\nJrjDyv0ndLZxS/Cs55Ki+ivTY5bj57sVRyRZojvd0wKzE+RLbH+h31H82BMmIiLyhI0wERGRJ2yE\niYiIPOGccD5eXx7OPQ2vU7QPdqbM2L9unbOc9V5k+b0wHIhuTr5WSO5uV7w3GhFlEnvCREREnrAR\nJiIi8oTD0fnQD8MHA9zYyL2JfL2ZpeHkdyIiKsnYEyYiIvKEjTAREZEnbISJiIg84ZxwPuo98LmN\nv3nATauc5CUtREREibAnTERE5AkbYSIiIk9ElfcAIiIi8oE9YSIiIk/YCBMREXnCRpiIiMgTNsJE\nRESesBEmIiLyhI0wERGRJ2yEiYiIPGEjTERE5AkbYSIiIk/YCBMREXnCRpiIiMgTNsJERESesBEm\nIiLyhI0wERGRJ2yEiYiIPGEjTERE5AkbYSIiIk/YCBMREXnCRpiIiMgTNsJERESesBEmIiLyhI0w\nERGRJ2yEiYiIPPl/1KQMrfKxMHgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fadcab8a358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对模型的理解\n",
    "- 模型为双层神经网络\n",
    "- 第一层输入784维数据,输出100维数据,使用Relu激活函数max=(0,x)\n",
    "- 第二层输入100维数据,输出10维数据,使用softmax激活函数,多用于回归分类问题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对模型训练过程（梯度如何计算，参数如何更新）的理解10分。 \n",
    "- 将数据分成32*1000进行训练,每次使用32个数据进行1000次训练\n",
    "- 每次训练按批次计算梯度(32),更新权重"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 对计算图的理解\n",
    "\n",
    "- 计算图就是先定义好计算逻辑,可以理解为解释计算逻辑的结构图,最后统一进行计算\n",
    "- 这样的好处是省略了很多中间变量,加快了计算的效率,减少计算时间."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型效果不好\n",
    "- 没有使用全部数据进行训练\n",
    "- 可以尝试使用其他优化算法进行训练,如Adam\n",
    "- 使用了固定的学习率,可使用学习率衰减的方法进行优化"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
